#ifndef PROTREEWIDGET_H
#define PROTREEWIDGET_H

#include <QTreeWidget>
#include <QAction>
#include <QProgressDialog>
#include "protreethread.h"
#include "opentreethread.h"
#include <QtMultimedia/QMediaPlayer>
#include <QtMultimedia/QMediaPlaylist>

class SlideShowDlg;

class ProTreeWidget : public QTreeWidget
{
    Q_OBJECT
public:
    ProTreeWidget(QWidget *parent = nullptr);

    void AddProToTree(const QString &name, const QString &path);

private:
    QSet<QString> _set_path;        // 判断重名
    // 右键单击某个item之后弹出菜单
    QTreeWidgetItem *_right_btn_item;       // 右键项
    QTreeWidgetItem *_active_item;      // 启动项
    QTreeWidgetItem *_selected_item;    // 选中项
    QAction *_action_import;        // 导入
    QAction *_action_setstart;      // 设置开始
    QAction *_action_closepro;      // 关闭项目
    QAction *_action_slideshow;     // 轮播图播放
    QProgressDialog *_dialog_progress;     // 进度条
    QProgressDialog *_open_progressdlg;

    std::shared_ptr<ProTreeThread> _thread_create_pro;      // 使用智能指针控制线程的创建(创建项目的线程)
    std::shared_ptr<OpenTreeThread> _thread_open_pro;       // 打开项目的线程
    std::shared_ptr<SlideShowDlg> _slide_show_dlg;              // 幻灯片播放

    QMediaPlayer *_player;
    QMediaPlaylist *_playlist;

private slots:
    void SlotItemPressed(QTreeWidgetItem *item, int column);        // 鼠标右键
    void SlotImport();             // 导入文件
    void SlotSetActive();       // 设置活动项目
    void SlotClosePro();        //  设置关闭项目
    void SlotDoubleClickItem(QTreeWidgetItem *doubleItem, int col);
    void SlotUpdateProgress(int count);     // 进度条更新
    void SlotFinishProgress();      // 进度条完成
    void SlotCancelProgress();      // 进度条对象框取消

    void SlotUpOpenProgress(int count);     // 进度条更新
    void SlotFinishOpenProgress();      // 进度条完成
    void SlotCancelOpenProgress();      // 进度条对象框取消

    void SlotSlideShow();           // 幻灯片播放

public slots:
    void SlotOpenPro(const QString &path);
    void SlotNextShow();
    void SlotPreShow();
    void SlotSetMusic();
    void SlotStartMusic();
    void SlotStopMusic();

signals:
    void SigCancelProgress();   // 进度条对话框取消信号
    void SigCancelOpenProgress();

    void SigUpdateSelected(const QString &);
    void SigIUpdatePic(const QString &);
    void SigClearSelected();        // 清空选中项
};

#endif // PROTREEWIDGET_H
